.text
.section .rodata
.align 3
.LC0:
    .string "value1 = %d, value2 = %d\n"
.LC1:
    .string "%2d %d\n"
.LC2:
    .string "address of arr[-1]: %p\n"
.LC3:
    .string "address of arr[4]: %p\n"
.LC4:
    .string "address of value1: %p\n"
.LC5:
    .string "address of value2: %p\n"

.text
.globl main
.type main, @function
main:
    addi sp, sp, -48
    sd ra, 40(sp)
    sd s0, 32(sp)
    addi s0, sp, 32

    li a5, 44
    // value1
    sw a5, -4(s0)
    // -8~20 arr
    li a5, 88
    // value2
    sw a5, -24(s0)
    // i: -28(s0)
    lw a1, -4(s0) /* value1 */
    lw a2, -24(s0) /* value2 */
    lui a5, %hi(.LC0)
    addi a0, a5, %lo(.LC0)
    call printf

    // 开始赋值
    li a5, -1
    sw a5, -28(s0) /* i */
    j .L2
.L1:
    lw a5, -28(s0) /* i */
    slliw a5, a5, 1
    sext.w a5, a5
    addiw a5, a5, 1
    sext.w a4, a5
    lw a5, -28(s0) /* i */
    slli a5, a5, 2
    add a5, a5, s0
    addi a5, a5, -20
    sw a4, 0(a5)
    lw a5, -28(s0) /* i */
    addiw a5, a5, 1
    sw a5, -28(s0) /* i */
.L2:
    lw a5, -28(s0) /* i */
    sext.w a5, a5
    li a4, 5
    blt a5, a4, .L1

    li a5, -1
    sw a5, -28(s0) /* i */
    j .L4
.L3:
    lw a5, -28(s0) /* i */
    mv a1, a5
    slli a5, a5, 2
    add a5, a5, s0
    lw a2, -20(a5)
    lui a5, %hi(.LC1)
    addi a0, a5, %lo(.LC1)
    call printf
    lw a5, -28(s0) /* i */
    addiw a5, a5, 1
    sw a5, -28(s0) /* i */
.L4:
    sw a5, -28(s0) /* i */
    sext.w a5, a5
    li a4, 7
    blt a5, a4, .L3

    lw a1, -4(s0) /* value1 */
    lw a2, -24(s0) /* value2 */
    lui a5, %hi(.LC0)
    addi a0, a5, %lo(.LC0)
    call printf

    li a5, -1
    sext.w a5, a5
    slli a5, a5, 2
    add a5, a5, s0
    addi a1, a5, -20
    lui a5, %hi(.LC2)
    addi a0, a5, %lo(.LC2)
    call printf

    li a5, 4
    sext.w a5, a5
    slli a5, a5, 2
    add a5, a5, s0
    addi a1, a5, -20
    lui a5, %hi(.LC3)
    addi a0, a5, %lo(.LC3)
    call printf

    addi a1, s0, -4
    lui a5, %hi(.LC4)
    addi a0, a5, %lo(.LC4)
    call printf

    addi a1, s0, -24
    lui a5, %hi(.LC5)
    addi a0, a5, %lo(.LC5)
    call printf

    ld ra, 40(sp)
    ld s0, 32(sp)
    addi sp, sp, 48
    jr ra
